package language.basic.oopBase;

//this的两种用法：
//1.this 指代对象，是jvm堆中的某个class的实例对象的引用
//2.在一个构造方法中调用类的另一个构造方法
class Fruit {
    public Fruit fruit;

    public void invoke(){
        fruit = this; //也可以将this赋给另一个对象变量
        System.out.println("this:"+ fruit); //this总是初始调用方法的对象
        this.hello();
    }

    public void hello(){
        System.out.println("Fruit");
    }
}

class Orange extends Fruit{
    public Orange orange;

    Orange(){
        this("用this调用其他构造器"); // 在构造器中调用this必须位于构造器第一行。
    }

    Orange(String s){
        System.out.println(s);
    }

    public void invokeParent(){
        super.invoke();
    }

    @Override
    public void hello(){
        System.out.println("this指代调用方法的对象");
    }
}

public class thisTest {
    public static void main(String[] args) {
        Orange orange = new Orange();
        orange.invokeParent(); //输出Orange,因为this指代当前对象orange
    }
}
